//https://jex.im/regulex/#!flags=i&re=%5E%5C%2Fhome(%3F%3A%5C%2F(%3F%3D%24))%3F%24

//正向肯定前瞻
//首先它和 (?:) 一样 是一个非获取匹配，不会出现在匹配结果字符串里面。
//下面的例子中要求第一个字符是数字,然后 正向肯定前瞻 要求 这个数字后必须跟一个[a-z]
//但需要注意的是 ?=[a-z] 匹配时并不会消耗掉一个字符（前瞻嘛 看一看 不会产生撒影响）, d(?=[a-z]) 只会消耗掉 '1a' 的 '1'
console.log('1a'.match(/\d(?=[a-z])[a-z]/)); //[ '1a', index: 0, input: '1a', groups: undefined ]
console.log('1a'.match(/\d(?=[a-z])x/)); //null //因为前瞻并不会消耗字符, 故这个正则其实要求 首字符数字后面必须跟x
console.log('1x'.match(/\d(?=[a-z])x/)); //[ '1x', index: 0, input: '1x', groups: undefined ]
console.log('11'.match(/\d(?=[a-z])x/)); //null
//todo So 用不用前瞻貌似没撒大区别 使用场景到底是怎样的

// 用了 后面就必须有
/*
const reg=/windows(?=2000|NT|98)/i
const str='windows'
const str2='windows98'
console.log(str.match(reg)); //null
console.log(str2.match(reg)); //true
*/




//正向否定前瞻
//同 正向肯定前瞻 只是是取反, 即 xxx 后面一定不是 yyy
console.log('1a'.match(/\d(?![a-z])[a-z]/)); // null //要求数字后面不能是 [a-z], 显然错误
console.log('1a'.match(/\d(?![A-Z])[a-z]/)); // [ '1a', index: 0, input: '1a', groups: undefined ]
